package com.jee.project.repo;

import com.jee.project.model.Course;
import com.jee.project.model.CourseStudent;
import com.jee.project.model.CourseStudentId;
import com.jee.project.model.Student;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.CrudRepository;

import java.util.List;

public interface CourseStudentRepository extends CrudRepository<CourseStudent, CourseStudentId> {
    /**
     * 查找某课程（所有年份）的选课情况
     *
     * @param course 目标课程
     * @return 选课列表
     */
    List<CourseStudent> findByCourse(Course course);

    /**
     * 查询某学年（所有课程）的选课情况
     *
     * @param year
     * @return
     */
    List<CourseStudent> findById_Year(Integer year);

    /**
     * 查找某课程某学年的选课情况
     *
     * @param course 目标课程
     * @param year   目标学年
     * @return 选课列表
     */
    List<CourseStudent> findByCourseAndId_Year(Course course, Integer year);

    /**
     * 使用JPQL查询没有选择指定课程的学生
     *
     * @param course
     * @return
     */
    @Query(value = "SELECT s"
            + " FROM Student s"
            + " WHERE s not in("
            + " SELECT cs.student "
            + " FROM CourseStudent cs"
            + " WHERE cs.course = ?1)")
    public List<Student> findStudentsByNotChosenCourse(Course course);

    /**
     * 使用SQL查询没有选择指定课程的学生
     *
     * @param courseId 课程Id
     * @return 返回学生实体列表
     */
    @Query(nativeQuery = true,
            value = "select *"
                    + " from student"
                    + " where id not in("
                    + " select student_id "
                    + " from course_student"
                    + " where course_id = ?1)")
    public List<Student> findByNotChosenCourseId(Long courseId);

}